//package redis
//
//import io.netty.buffer.ByteBuf
//import io.netty.buffer.ByteBufAllocator
//import io.netty.buffer.ByteBufInputStream
//import io.netty.buffer.ByteBufOutputStream
//import kotlinx.serialization.ExperimentalSerializationApi
//import kotlinx.serialization.decodeFromByteArray
//import kotlinx.serialization.encodeToByteArray
//import kotlinx.serialization.protobuf.ProtoBuf
//import org.example.seri.Data
//import org.redisson.client.codec.BaseCodec
//import org.redisson.client.protocol.Decoder
//import org.redisson.client.protocol.Encoder
//import java.io.IOException
//import java.nio.ByteBuffer
//
//class PrefixBasedCodec(
//    private val jsonCodec: RedisCodec<String, Any>,
//    private val protobufCodec: RedisCodec<String, Any>,
//    private val kryoCodec: RedisCodec<String, Any>
//) : RedisCodec<String, Any> {
//
//    override fun encodeKey(key: String): ByteBuffer {
//        return ByteBuffer.wrap(key.toByteArray())
//    }
//
//    override fun decodeKey(bytes: ByteBuffer): String {
//        val array = ByteArray(bytes.remaining())
//        bytes.get(array)
//        return String(array)
//    }
//
//    override fun encodeValue(value: Any): ByteBuffer {
//        return when {
//            keyIsJson(keyHint) -> jsonCodec.encodeValue(value)
//            keyIsProtobuf(keyHint) -> protobufCodec.encodeValue(value)
//            else -> kryoCodec.encodeValue(value)
//        }
//    }
//
//    private var keyHint: String = ""
//
//    // 临时保存 key 用于判断序列化方式
//    private fun extractKey(bytes: ByteBuffer): String {
//        val array = ByteArray(bytes.remaining())
//        bytes.duplicate().get(array)
//        return String(array)
//    }
//
//    override fun decodeValue(bytes: ByteBuffer): Any {
//        val key = extractKey(bytes) // 实际中你需要从外部传入 key，或使用装饰器模式
//        return when {
//            key.startsWith("json:") -> jsonCodec.decodeValue(bytes)
//            key.startsWith("pb:") -> protobufCodec.decodeValue(bytes)
//            key.startsWith("kryo:") -> kryoCodec.decodeValue(bytes)
//            else -> throw IllegalArgumentException("Unknown prefix for key: $key")
//        }
//    }
//}